#include "my_io.h"

/*
 console_read: legge da console un input e lo converte 
 direttamente nel formato relativo
 input:
 1 - destination (puntatore void)
 il parametro che deve essere riempito con i dati
 presi da terminale
 2 - messaggio (puntatore char) se non NULL, scrive un 
 messaggio per invitare l'utente a inserire l'input
 */

void 
console_read ( void *destination, enum RETURN_TYPE return_type , char *messaggio ) 
{
	//dichiaro l'input della massima dimensione
	//per accogliere da tastiera cosa sto leggendo
	char *input;
	if( (input = (char *)malloc(MAX_STRING)) == NULL )
		perror("malloc di input fallita");
	
	//prima di tutto stampo il messaggio (se esiste)
	//passato come parametro
	if( messaggio != NULL && strlen(messaggio) != 0 ) 
		printf("%s\n", messaggio);
	
	//eseguo la scanf per leggere le informazioni
	//e le salvo in input
	//getchar() mi risolve il problema del \n in
	//caso la funzione fosse messa in un ciclo
	scanf("%s", input);
	getchar();
	
	//rialloco lo spazio da MAX_STRING all'attuale dimensione
	realloc(input, strlen(input));
	
	switch (return_type) {
		case RETURN_INT:
			if( atoi(input) != 0 )
				*(int *)destination = atoi(input);
			break;
		case RETURN_FLOAT:
			*(float *)destination = atof(input);
			break;
		case RETURN_DOUBLE:
			*(double *)destination = atof(input);
			break;
		case RETURN_LONG:
			*(long *)destination = atol(input);
			break;
		case RETURN_LONG_LONG:
			*(long long *)destination = atoll(input);
			break;		
		case RETURN_SINGLE_CHAR:
			*(char *)destination = input[0];
			break;
		case RETURN_STRING:
			//*(char *)destination = input;
			break;
		default:
			//*(char *)destination = input;
			break;
	}
	
	//infine libero input dalla memoria
	free(input);
}


